package GUI;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

/**
 * Classe que tem por função apresentar a lista de itens salvos.
 *
 * @author (R. Soares)
 * @version (1.0 - 24.05.2010)
 */

public class ListaGUI extends JFrame
{
    // Variáveis de Instância --------------------------------------------------*

    // Objetos presentesna área de jogo
    private  JList lista;
    private String[] _listaJogos;
    private String _jogadorSelecionado;
    private String _partidaSelecionada;
    private int _opcao;


    // Configuração de dimenções da menu
    private static final int PREFERRED_WIDTH = 300;
    private static final int PREFERRED_HEIGHT = 220;
    private static final Dimension PREFERRED_SIZE =
                                new Dimension(PREFERRED_WIDTH,PREFERRED_HEIGHT);

    // Contrutores  ------------------------------------------------------------ *
    /**
     * Abre a janela, se a mesma não estiver fechada.
     */
    public void showWindow()
    {
        setVisible(true);
    }

    /**
     * Criação do frame para o panel.
     */
   public ListaGUI(ArrayList listaNomeJogos)
   {
        // Inclui nome na janela de menu
       setTitle("2010 - Jogos Salvos");

        // Habilita que o fechamento da janela, volte ao menu anterior.
        addWindowListener(new WindowAdapter()
        {
               public void windowClosing(WindowEvent ev)
               {
                      setVisible(false);
                      _opcao = 8;
               }
         });

        // Recebe a lista de identificadores de jogos
        if ( listaNomeJogos != null)
        {
                _listaJogos = new String[ listaNomeJogos.size() ];
                int posicao = 0;

                Iterator it = listaNomeJogos.iterator();

                 while( it.hasNext() )
                 {
                         _listaJogos[posicao] =  (String) it.next();
                         posicao++;
                  }
        }
        else
        {
            _listaJogos = new String[]{""};
        }

        // Cria um container para a área da lista e inclui a área da tela
       Container contentPane = getContentPane();
       contentPane.add( listaArea() );

       // Estabelece as dimensões da área de menu.
       setSize(PREFERRED_SIZE);

       // Desabilita a caracteristica de redimencionamento da tela.
        this.setResizable(false);

       // Posiciona a janela no centro da tela
       this.setLocationRelativeTo(null);

       _opcao = 0;
    }

    // Método ----------------------------------------------------------------- *

    /**
     * Configura o pianel da área de botões. Retorna um container da área configurada.
     *
     * @return Container : Container da área de botões
     */
    private Container listaArea()
    {
        // Criação dos panels para inclusão da lista e dos botões
        JPanel textoArea = new JPanel();
        JPanel listaArea = new JPanel();
        JPanel buttonArea = new JPanel();

       // Criação da área de texto
        JLabel texto = new JLabel("Selecione um jogo e escolha uma opção");

        // Criação dos botões
        JButton abrir     =  new JButton("   Abrir   ");
        JButton apagar =  new JButton(" Apagar ");
        JButton voltar   =   new JButton("  Voltar  ");

        // Cria a lista de jogos
       lista = new JList(_listaJogos);
       lista.setVisibleRowCount(6);

       if (_listaJogos != null)
            lista.setSelectedIndex(0);

       lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


       // Tomada de ação para acionamento do botão abrir.
       abrir.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent ev)
            {
                _partidaSelecionada = (String) lista.getSelectedValue();
                _opcao = 5;
            }
       });

        // Tomada de ação para acionamento do botão apagar.
        apagar.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ev)
            {
                _jogadorSelecionado = (String) lista.getSelectedValue();
                tratarBotaoApagar();
            }
        });

        // Tomada de ação para acionamento do botão voltar.
        voltar.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ev)
            {
                setVisible(false);
                _opcao = 9;
            }
        });

       // Inclusão do texto na área de texto
       textoArea.add(texto,BorderLayout.CENTER );

       // Inclusão da lista na área de lista
       listaArea.add(new JScrollPane(lista), BorderLayout.CENTER );

        // Inclui os botões na área de botões
        buttonArea.add(abrir, BorderLayout.CENTER);
        buttonArea.add(apagar, BorderLayout.CENTER);
        buttonArea.add(voltar, BorderLayout.CENTER);

         // Criação da área de Panel e inclusão da outras áreas nela.
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());

        panel.add(textoArea, BorderLayout.NORTH);
        panel.add(listaArea, BorderLayout.CENTER);
        panel.add(buttonArea, BorderLayout.SOUTH  );

        return panel;
    }

    /**
     * Método que trata o acionamento do botão apagar.
     */
     public void tratarBotaoApagar()
     {
         int opcaoNovoJogo = 0;
         Object[] options = { "Sim", "Não" };

         // SIM = 0; NÃO = 1, FECHAR = -1
         opcaoNovoJogo = JOptionPane.showOptionDialog(null,
                                     "Deseja apagar o jogo : " + _jogadorSelecionado,
                                      "Aviso - ApagarJogo",
                                       JOptionPane.DEFAULT_OPTION,
                                       JOptionPane.WARNING_MESSAGE,
                                      null, options, options[0]);

          if(opcaoNovoJogo == 0)
          {
                _opcao = 7;
                setVisible(false);
               JOptionPane.showMessageDialog(this, "Jogo Apagado");
           }
     }

    /**
     * Método que retorna o identificador do jogo selecionado
     *
     * @return String : Identificador do jogo
     */
     public String getJogoSelecionado()
     {
        return _jogadorSelecionado;
     }

    /**
     * Retorna a opção selecionada na janela (1 : Abrir, 2 : Apagar)
     *
     * @return int : Valor representando a opção selecionada
     */
     public int getOpcao()
     {
        return _opcao;
     }
}
